package com.tedu.api.list;

import org.junit.Test;

import java.util.*;


/**
 * List集合
 * Collection顶级集合【容器】-----List集合【子接口】
 * List集合存储数据：存储有序并且重复的元素
 * List集合---接口---无法创建对象
 * 实现类：
 * ArrayList：【常用：List与ArrayList的方法完全一致】数组实现
 * LinkedList：双向链接实现
 * Vector:jdk1.0版本:性能:增删效率慢,线程安全！
 */
public class ListAPI {
    /**
     * get(int index)    返回值：E
     */
    @Test
    public void testGet(){
        //List集合 ----多态创建集合
        List<String> list=new ArrayList<>();
        //Collection 提供add方法 | List 提供add方法  【重写】
        list.add("三生三世");
        list.add("你的名字");
        list.add("扎娃娃");
        System.out.println("List集合："+list);
        //获取到：list集合中元素叫:你的名字
        String str=list.get(1);
        System.out.println("获取集合中："+str);
        //需求：获取list集合中的所有元素 ---普通for
        for(int i=0;i<list.size();i++){ //针对集合--下标：从0开始
            str=list.get(i);
            System.out.println("遍历List集合："+str);
        }
    }
    /**
     * set(int index, E e)  返回值：E
     * 作用：将给定元素设置到指定的下标位置处
     *
     */
    @Test
    public void testSet(){
        List<String> list=new ArrayList<>();
        //Collection 提供add方法 | List 提供add方法  【重写】
        list.add("三生三世");
        list.add("你的名字");
        list.add("扎娃娃");
        //需求:List集合中元素“你的名字”修改为“749局”
        list.set(1,"749局");
        System.out.println("修改后List集合："+list);
    }
    /**List继承Collection[重载：拓展功能]
     * add(int index,E  e)    返回值：void
     * 作用：将给定元素插入指定位置【指定位置前面插入】
     * remove(int index)    返回值：E
     * 作用：将给定位置的元素从集合中删除
     */
    @Test
    public void testAR(){
        //创建List集合---重写方法add()  重载方法add(下标，"元素")
        List<String >list=new ArrayList<>();
        list.add("秦始皇");list.add("汉武帝");
        list.add("王安石");list.add("潘金莲");
        System.out.println("List集合元素："+list);
        list.add(2,"武大郎");
    }
/**
 * List集合
 * subList(int start,int end)   返回值：List E
 * 作用：截取范围内的子集   口诀：含头不含尾
 */
@Test
    public void testSubList(){
    //创建集合，10个元素：0~9
    List<Integer>list=new ArrayList<>();
    for (int i=0;i<10;i++ ){//i 循环针对下标
        list.add(i);
    }
    System.out.println("List集合："+list);
    //获取子集：list集合元素中3~8之间元素
   List<Integer>listch= list.subList(3,9);
    System.out.println("获取子集："+listch);
    System.out.println("list集合："+list);
    //获取子集：list集合元素中2~6之间元素，子集元素扩大10倍
    //1.从List集合中，取2~6之前元素
    List<Integer> lch=list.subList(2,7);
    //2.for循环遍历子集，遍历同时给每个下标的元素*10
    for (int i=0;i<lch.size();i++){//i 获取下标 0~4
        lch.set(i,lch.get(i)*10);

    }
    System.out.println("子集扩大10倍元素："+lch);
    //提示：size() 获取子集长度 set(下标，获取元素*10)设置每个下标元素
    //      get(下标)  获取元素值*10
    /**
     * 需求：清空子集   输出：list    【0，1，7，8，9】
     */
    lch.clear();
    System.out.println("清空子集：【List】"+list);
}
/**
 * 集合排序
 * Random    伪随机数类    包位置：java.util
 * nextInt(数值)   返回值一个伪随机数值【范围：0~数值】
 *
 * Collections  集合工具类   静态方法：sort
 * sort()方法:针对集合元素是数值进行排序【默认：升序】！返回值：List
 *
 * 需求：随机生成10个元素【整数：100以内】的集合---对集合排序
 */
@Test
    public void testArrayList(){
    //创建List集合<整数>
    List<Integer>list=new ArrayList<>();
    //创建伪随机数
    Random r=new Random();
    for(int i=0;i<10;i++){//10个元素
        list.add(r.nextInt(100));//100以内

    }
    System.out.println("打印List:"+list);
    //对list集合元素进行排序  Collections.sort(集合)
    Collections.sort(list);
    System.out.println("【有排序】打印List:"+list);
}

    /**
     * 需求：创建集合，存汉字，排序--能排【没规则】
     * sort(集合，Comparator)    重载功能：拓展排序的功能
     * 集合：排序集合
     * Comparator比较器接口：指定规则--【定规则：按照字符串长短排序】
     * 重写：compare()--定义比较规则，默认自带交换功能
     */
    @Test
    public void testComparator(){
    //创建集合--存：汉字
    List<String>list=new ArrayList<>();
    list.add("a");
    list.add("s");
    list.add("y");
    //比较器规则定义：按照字符串长短进行排序
      Comparator<String>com=new Comparator<String>(){
          //compare方法：针对集合【自定义】排序
          //参数1：Object o1 集合中第一【交换】个元素
          //参数2：Object o2 集合中第二【交换】个元素
          public int compare(String o1,String o2){
              /**
               * 返回值  大于  0  4-2  交换
               * 返回值  小于  0  3-4  不交换
               * 返回值  等于  0  2-2  交换
               */
              return o1.length()-o2.length();
          }
      };


    Collections.sort(list);
    System.out.println("排序后集合："+list);
}
}














//学习心得：练----拓展【计算机语言：应用】----坚持【45%】
//javaSE基础  javaEE
